iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
Modern Web

Phoenix 1.7 完全教學系列 第 2

2 快速上手夠用的 Elixir (IEX, 型別)

  • 分享至 

  • xImage
  •  

Elixir 的官網 這樣寫道: Elixir is a dynamic,
functional language for building scalable and maintainable applications.

但我認為 Elixir 是個簡單的語言,別被 functional 嚇到了。
剛入門的時候我們可以先不需要擔心 Elixir 的進階、底層甚至核心部分,
暫時專注在語法上就可以了。

IEX

除了 mix 之外,Elixir 還內建了 iex 可以讓我們即時執行 Elixir 程式碼

在終端機中輸入 iex 進入 iex,我們可以看到如下

Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit]

Interactive Elixir (1.15.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

我們可以在 iex(1)> 後輸入我們的 Elixir 程式碼,按下 Enter 之後就會執行

IO.puts "Hello World"

這篇的所有範例都可以在 iex 中執行

介紹幾個我們常用的資料型別,基本的型別與其他語言相差不大,快速看過一次即可

Integer 與 Float

加減乘除範例,要注意除法會自動轉成 Float

5 + 2 #=> 7
5 - 2 #=> 3
5 * 2 #=> 10
5 / 2 #=> 2.5

(#後面的內容為程式碼註解 這邊使用 `#=>`` 來代表 IEX 的回傳值)

另外有提供 remdiv 來取 Integer 的餘數與商

rem(5, 2) #=> 1
div(5, 2) #=> 2

Float 的範例

5 + 2.3 #=> 7.3

Boolean

布林值寫成小寫的 truefalse

true #=> true
false #=> false

運算

true and true #=> true
true && true #=> true 通常會寫這個
true or false #=> true
true || false #=> true 通常會寫這個
not true #=> false
!true #=> false 通常會寫這個

Atom

Atom 是代表自己的常數,在有的語言叫做 Symbol

:hello #=> :hello
:world #=> :world

另外,布林值的 truefalse 其實也是 Atom

true == :true #=> true
is_atom(true) #=> true

任何大寫開頭的字串都會被轉成 Atom,通常用在模組名稱,後面在介紹 function
時會提到。

雖然可以但平常不會這樣用

is_atom(Hello) #=> true

String

Elixir 的 String 使用雙括號

"Hello World"
"可以使用 Emoji 🙃"
"你好" #=> "你好"

Elixir 也支援字串內插入 Elixir 程式碼,使用 #{}

"5 的平方是 #{5**2}" #=> "5 的平方是 25"
name = "Jack"
"Hello #{name}" #=> "Hello Jack"

有字串相加用的特殊語法,使用 <>

"Hello " <> "World" #=> "Hello World"

List (Linked list)

使用 [], 來組成 list,內容可以是不同型別

[1, 2, 3] #=> [1, 2, 3]
[1, "Hello", true] #=> [1, "Hello", true]

可以使用 ++-- 來合併或相減兩個 list

[1, 2, 3] ++ [4, 5] #=> [1, 2, 3, 4, 5]
[1, 2, 3] -- [2] #=> [1, 3]

Tuple

使用 {}, 來組成 tuple,內容可以是不同型別

{1, 2, 3}

要用 List 還是 Tuple

大部分的時候,通常像是列出所有的使用者這種情況,會使用 List

["Jack", "Mary", "John"]

在我們的教學中,會使用 Tuple 的時候通常是 function 的回傳值,像是

{:ok, "蘋果"}
{:error, "錯誤訊息"}

官網的
lists-or-tuples
裡面有比較正確且詳細的說明組成與使用時機,但是在這邊先不用擔心太多。

Map

鍵值組合的首要選擇,使用 %{}=> 來組成 map,內容可以是不同型別

%{"name" => "Jack", "age" => 18}

如果鍵值都是 Atom,可以使用 : 來簡化,

%{:name => "Jack"} 可以寫成 %{name: "Jack"}

並能用 . 來取值

user = %{name: "Jack", age: 18}
user.name #=> "Jack"

Keyword list

list 與 tuple 的組合 [{key, value}], 與 Map 的差別在於,key 一定是
Atom,且可以重複

[{:name, "Jack"}, {:age, 18}]

並可以簡化成

[name: "Jack", age: 18]

通常用在 function 的 option 參數上


上一篇
1 Elixir 與其他開發相關工具安裝介紹
下一篇
3 快速上手夠用的 Elixir (模組, 函式)
系列文
Phoenix 1.7 完全教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言